package org.ajc.auth.controller;

import org.ajc.auth.dto.LoginDTO;
import org.ajc.auth.service.ILoginService;
import org.ajc.auth.vo.LoginVO;
import org.ajc.base.util.AjaxResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * 登录页面
 *  login有没有返回值？ -1 有 true false (pass掉)
 *  怎么操作它  校验
 *  我登录成功之后怎么知道之前有没有人登录过？ => 需不需要记录登录状态?  需要
 *      后台需不需要记录登录状态？ 要
 *      在发出登录请求的时候 判断是否有访问登录资源的权限
 *      注意：返回结果时候 返id 是一定有风险
 *
 *  怎么记录登录状态？
 *      -存表 数据库压力大 每一次请求都会存数据
 *      -session 前后端分离 数据一定不存session  (session 是 request.session出来的.)
 *        -当前后端不分离的时候 前后端在同一个项目 请求访问的都是同一个session (注意 http请求都是无状态的)
 *        -当前后端分离的时候 前后端不在同一个项目 每一次访问的session，sessionId不一样了 session失效
 *      -后台session没法存？ 有方案
 *      方案 ： 全局静态map(只是今天用，以后用Redis)  使用一个中间件来存放
 *           map怎么返回前端 ？不能使用id  id使用用户私密的资源
 *              使用唯一标识的Key 使用随机数(UUID)造一个(当登录时造一个，退出时清空)
 *              唯一标识的随机数称为 token
 *         返回值  token 和 User对象
 *         所以返回值 就不是true 和 false 了 而是 token 和 User对象
 *
 *         注意：我们前面说过前端返参数给后台需要自定义一个类 叫 DTO
 *              现在后端返回参数到前台也需要自定一个类 叫 VO
 *
 */
@RestController
@RequestMapping("/login")
public class LoginController {

    @Autowired
    private ILoginService loginService;

    @PostMapping
    public AjaxResult login(@RequestBody LoginDTO loginDTO){
        try {
            LoginVO loginVO = loginService.login(loginDTO);
            return AjaxResult.success(loginVO);
        } catch (Exception e) {
            e.printStackTrace();
            return AjaxResult.error("登录失败噢~"+e.getMessage());
        }
    }
    @PutMapping
    public AjaxResult loginOut(){
        try {

            return AjaxResult.success();
        } catch (Exception e) {
            e.printStackTrace();
            return AjaxResult.error("登录失败噢~"+e.getMessage());
        }
    }
}
